package 文件io;
import java.nio.*;
/*
  nio包，1.4后加入，提高java io操作效率
  不同于io面向流一个字节一个字节操作，nio面向块，一个块一个块操作
  nio所有数据都是经过缓冲区(实际上是数组)处理的，读取/写入都是放到缓冲区
  常用的缓冲区BtyeBuffer，通过get/set对缓冲区操作
  java的基本数据类型(出boolean)都有缓冲区
  
*/
public class 新io
{
	public static void main(String[]args){
		//创建一个字节缓冲区，申请内存空间为8个字节
		ByteBuffer buf=ByteBuffer.allocate(8);
		//缓冲区三个重要属性
		System.out.println("此缓冲区位置position="+buf.position());//位置大概就是下一次写入时的位置，初始是0
		System.out.println("此缓冲区限制limit="+buf.limit());//限制初始是容量大小，
		System.out.println("此缓冲区容量capacity="+buf.capacity());//返回缓冲区容量
		//向缓冲区写入数据
		buf.put((byte)10);
		buf.put((byte)20);
		buf.put((byte)30);
		buf.put((byte)40);
		System.out.println("========..======");
		System.out.println("此缓冲区位置position="+buf.position());
		System.out.println("此缓冲区限制limit="+buf.limit());
		System.out.println("此缓冲区容量capacity="+buf.capacity());
		
		/*
		 缓冲区反转
		 flip() 使缓冲区为一系列新的通道写入或相对获取 
		    操作做好准备：
			 它将限制设置为当前位置，然后将位置设置为 0。
		*/
		buf.flip();//写入或其他操作前反转
		System.out.println("=======..========");
		System.out.println("此缓冲区位置position="+buf.position());
		System.out.println("此缓冲区限制limit="+buf.limit());
		System.out.println("此缓冲区容量capacity="+buf.capacity());
		//hasRemaining  position->limit之间有元素返回true 否则返回false
		if(buf.hasRemaining()){
			//remaining 返回当前位置与限制之间的元素数。
			for(int i=0;i<buf.remaining();i++){
				//get(i) 取位置i的元素
				System.out.println(buf.get(i));
			}
		}
		System.out.println("=======..========");
		System.out.println("此缓冲区位置position="+buf.position());
		System.out.println("此缓冲区限制limit="+buf.limit());
		System.out.println("此缓冲区容量capacity="+buf.capacity());
		
		
	}
}
